import cv2 as cv  # 导入OpenCV库
import numpy as np  # 导入NumPy库

img_rgb = cv.imread('../test_datas/mario.png')  # 读取原始彩色图片
img_org = img_rgb.copy()  # 备份原始图片
print(img_rgb.shape)  # 打印彩色图片的尺寸
img_gray = cv.cvtColor(img_rgb, cv.COLOR_BGR2GRAY)  # 转为灰度图像
print(img_gray.shape)  # 打印灰度图像的尺寸
template = cv.imread('../test_datas/mario_coin.png',0)  # 读取模板图片（灰度）
print(template.shape)  # 打印模板图片的尺寸
w,h = template.shape[::-1]  # 获取模板的宽和高

res =cv.matchTemplate(img_gray,template,cv.TM_CCOEFF_NORMED)  # 模板匹配，返回相似度矩阵

threshold =0.9  # 设置匹配阈值
loc =np.where(res >= threshold)  # 找到所有大于阈值的位置

cordXs,cordYs = loc[1],loc[0]  # 提取所有匹配点的x、y坐标
for idx ,X in enumerate(cordXs):  # 遍历所有匹配点
    cv.rectangle(img_rgb, (X, cordYs[idx]), (X + w, cordYs[idx] + h),(0, 0, 255),1)  # 在原图上画出红色矩形框

cv.imshow("res",res)  # 显示匹配结果矩阵
cv.imshow("img_org",img_org)  # 显示原始图片
cv.imshow("img_rgb",img_rgb)  # 显示标记后的图片
cv.waitKey(0)  # 等待按键
cv.destroyAllWindows()  # 关闭所有窗口